package com.muse.genericity;

import java.util.ArrayList;
import java.util.List;

/**
 * 指定类型通配符的上限 -- 返回值为泛型的方法可以使用了
 */
public class TypeWildcard4 {
    public static void main(String[] args) {
        List<Integer> intList = new ArrayList<>();
        List<Long> longList = new ArrayList<>();
        print(intList);
        print(longList);
    }

    /** ? extends Number：指定通配符的上限，即调用本方法传递的List后尖括号里的类型只能是Number及其子类 */
    public static void print(List<? extends Number> list) {
        // 因为调用本方法时传递的实参可能是List<Long>也可能是List<Integer>或其他，不能确定实参具体的类型，所以下面代码错误
        // list.add(new Integer(100)); // 错误
        // list.add(new Long(100)); // 错误
        list.add(null); // 可以加入null

        // 可以调用get()方法返回集合的元素
        for (int i =0; i < list.size(); i++) {
            Number obj = list.get(i); // 返回值为泛型的方法可以使用了
            System.out.println(obj);
        }
    }
}
